// 请求接口
import { getList ,getInfo,deleteUser,addUser ,editUser ,isEnableUser,login,getAuthCode,editPass} from '@/api/user'

import Qs from 'qs'
// 存在 cookies 中的 token
import { getToken, setToken, removeToken, setId,removeId } from '@/utils/auth'
// 重设路由表
import { resetRouter } from '@/router'

// 默认的用户状态
const getDefaultState = () => {
  return {
    token: getToken(),
    id:'',
    name: '',
    avatar: '',
    store:''
  }
}

const state = getDefaultState()

const mutations = {
  RESET_STATE: (state) => {
    // Object.assign方法用于对象的合并
    // 如果目标对象与源对象有同名属性，则后面的属性会覆盖前面的属性。
    Object.assign(state, getDefaultState())
  },
  SET_ID: (state, id) => {
    state.id = id
  },
  SET_TOKEN: (state, token) => {
    state.token = token
  },
  SET_NAME: (state, name) => {
    state.name = name
  },
  SET_AVATAR: (state, avatar) => {
    state.avatar = avatar
  },
  SET_STORE: (state, store) => {
    state.store = store
  }
}

const actions = {

  // 获取用户列表信息
  async getList({commit},serchForm) {
    let res = await getList(serchForm);
    return res
  },
  // 删除用户信息
  async deleteUser({},id) {
    let res = await deleteUser(id);
    return res
  },
  // 添加用户信息
  async addUser({},userForm) {
    // console.log(userForm);
    const res = await addUser(userForm);
    return res
  },
  // 修改单个学生信息
  async editUser({},userInfo) {
    const res = await editUser(userInfo.id,userInfo);
    return res
  },
  async isEnableUser({},info){
    // 拼接字符串后端使用参数来接收 不是请求体
    let params = Qs.stringify(info)
    console.log(params);
    const res = await isEnableUser(info.id,params)
    return res
  },
  async login({},info){
    console.log(info);
    const res = await login(info)
    return res
  },
  save({commit,state},user){
    commit('SET_TOKEN', user.role.name)
    commit('SET_ID', user.id)
    commit('SET_NAME', user.username)
    commit('SET_AVATAR', user.avatar)
    commit('SET_STORE', user.store.id)
    setToken(user.role.name)
    setId(user.id)
  },
    // 获取用户信息 在权限 js 路由跳转都会判断一下 
  // 刷新会清空store的信息 所以要重新获取一下 
  // 获取单个用户信息
    async getUserInfo({commit},id) {
      // console.log("获取用户信息"+id);
      const  res  = await  getInfo(id)
      // console.log(res);
      if (res.code == 0) {
        return 0
      }
      // state.save(res.data)
      const { username, avatar,store } = res.data
      commit('SET_ID', id)
      commit('SET_NAME', username)
      commit('SET_AVATAR', avatar)
      commit('SET_STORE', store.id)
      return 1
    },
    async getAuthCode({},emailInfo) {
      // console.log(emailInfo);
      const res = await getAuthCode(emailInfo)
      return res
    },
    async editPass({},userInfo) {
      console.log(userInfo);
      const res = await editPass(userInfo)
      return res
    },
  // 用户退出登录
    async logout({ commit, state }) {
      // 移除 cookies 中的 token
      removeToken() 
      removeId()
      // 重置路由表
      resetRouter()
      // 提交重置请求 到 mutations 重置信息
      commit('RESET_STATE')
  },
  // 设置token
  async setToken({commit},name) {
    commit('SET_TOKEN', name)
    setToken(name)
  },
  // 重置 token
  resetToken({ commit },) { 
    return new Promise(resolve => {
      // 移除 cookies 中的 token
      removeToken() 
      removeId()
      commit('RESET_STATE')
      resolve()
    })
  }
  
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

